Skip to Content
Yodao 2.0 soon ... 🚀

âš¡ Real-time data from PumpFun

Our API exposes several WebSocket channels you can use to get live token data.

✨ Meme board

After you sent POST request to meme tables route, you can receive the latest updates for each token in the table via web socket connection.

View Subscription Message

json
{
"event": "update_pools_info",
"data": {
  "action": "subscribe",
  "id": "USER ID"
}
}

View Example Response

json
{
"channel": "update_pools_info",
"pool": "3i8UBuzzBiu45RKxK5SyTmtmud2mft8auuqEeRN8pAPW",
"data": {
  "slot": 380818976,
  "tx_index": 1131,
  "signature": "hGbsbzzqpNTs3Vx1va7Yb8ukuBaUbMFcRQWgoiRUBWhdK9GA1amTr4dRjsv1YzDvUSnUK6ZsG6w7eKDR6efrAUw",
  "source": "pump",
  "timestamp": "2025-11-18 04: 26: 04",
  "signer": "75KApSebYNvBk8cRfQkYCT3wXyN6gZJ5WcnsGpLdTvLn",
  "mint": "7dGQq8Lk9Vw3bjJpGP3Qt9o4ZvBqN2MmqNTUuJJ3M5bX",
  "pool": "6CuawiapYCcD3hyuHL73QseLGyPaKFQGymMsAVVUuPUw",
  "direction": "buy",
  "base_mint_amount": 1000000,
  "quote_mint_amount": 50000,
  "base_mint_price_usd": 0.0000123,
  "sol_price_usd": 185.50,
  "volume_usd": 12.30,
  "m_cap_usd": 45000.75,
  "bonding_curve_progress": 0.35,
  "liquidity_usd": 8500.20,
  "chain_fee": 5000,
  "pump_fee": 12300,
  "creator_fee": 0,
  "base_balance_before": 5000000,
  "base_balance_after": 6000000,
  "fresh_wallet": false,
  "sniper_wallet": false,
  "pro_trader": true,
  "bundle_wallet": false,
  "creator_wallet": false,
  "insider_wallet": false
}
}

🌱 Newly launched Pump.Fun tokens

When a new token launches on PumpFun you’ll get a message with full token details.

View Subscription Message

json
{
"event": "new_launched_pool",
"data": {
  "action": "subscribe",
  "id": "USER ID"
}
}

View Example Response

json
{
"channel": "new_launched_pool",
"data": {
  "name": "The Original 67",
  "symbol": "76",
  "signature": "Wt7WPrkq55aRpPzad6icdXUBtiR3CF9MbQuReCKUrsBQTbm6iP86BCWP9LbB4ow2igJbXBcRJPc1aN4d1esDnRV",
  "mint": "7bexyyx5sAUwppn7kGLe79pnUyeMBGR73YnrKhTTpump",
  "pool_amm": "2VTdi7zqY7AXjcd4sjCqqSCHT6CKt8yDdrA2nqFMKnxv",
  "bonding_curve": "6CuawiapYCcD3hyuHL73QseLGyPaKFQGymMsAVVUuPUw",
  "timestamp": "2025-11-18 04: 28: 54",
  "uri": "https://ipfs.io/ipfs/bafkreihib5ucexhygmxt6h6swungrilwmipma5qovtz55mrdl7cexthtga",
  "creator": "BBBZrfd9cx2u5fLXvH4SSJW8xTfUtU8k53sMXrEsFEM6",
  "image": "https://ipfs.io/ipfs/bafkreibcq54j5qvyj5on4e6d7ruqzebjl5f75gjxmshzdvh434rgyud4gu",
  "video": "",
  "website": "https://x.com/itsflashiy/status/1990638087979020794?s=46",
  "discord": "",
  "telegram": "",
  "description": "",
  "twitter": "https://x.com/itsflashiy/status/1990638087979020794?s=46"
}
}

🎯 Track Specific Pump Pool

Subscribe to updates for a specific token/pool by its mint address. Perfect for monitoring individual tokens in real-time.

View Subscription Message

json
{
"event": "update_mint_info",
"data": {
  "action": "subscribe",
  "id": "USER ID",
  "mint": "9pgKQ4tG88y6XbUUZUnMpUjdRakDUvmdGwMLAvqNxwpH"
}
}

View Example Response

json
{
"channel": "update_mint_info",
"pool": "6CuawiapYCcD3hyuHL73QseLGyPaKFQGymMsAVVUuPUw",
"data": {
  "slot": 380818976,
  "tx_index": 1131,
  "signature": "hGbsbzzqpNTs3Vx1va7Yb8ukuBaUbMFcRQWgoiRUBWhdK9GA1amTr4dRjsv1YzDvUSnUK6ZsG6w7eKDR6efrAUw",
  "source": "pump",
  "timestamp": "2025-11-18 04: 26: 04",
  "signer": "75KApSebYNvBk8cRfQkYCT3wXyN6gZJ5WcnsGpLdTvLn",
  "mint": "9pgKQ4tG88y6XbUUZUnMpUjdRakDUvmdGwMLAvqNxwpH",
  "pool": "6CuawiapYCcD3hyuHL73QseLGyPaKFQGymMsAVVUuPUw",
  "direction": "buy",
  "base_mint_amount": 1000000,
  "quote_mint_amount": 50000,
  "base_mint_price_usd": 0.0000123,
  "sol_price_usd": 185.50,
  "volume_usd": 12.30,
  "m_cap_usd": 45000.75,
  "bonding_curve_progress": 0.35,
  "liquidity_usd": 8500.20,
  "chain_fee": 5000,
  "pump_fee": 12300,
  "creator_fee": 0,
  "base_balance_before": 5000000,
  "base_balance_after": 6000000,
  "fresh_wallet": false,
  "sniper_wallet": false,
  "pro_trader": true
}
}

🎉 Token migration to Pump AMM

Track token migration in real time. When the bonding curve reaches 100% you’ll receive a notification.

View Subscription Message

json
{
"event": "mint_migration",
"data": {
  "action": "subscribe",
  "id": "USER ID"
}
}

View Example Response

json
{
"channel": "mint_migration",
"data": {
  "signature": "4r9cEa34WaGyTCk9RybwyVEHVZqZDP3yoeRFfPwZiQeKnei5gvPe41zBDD8zvsaioEmVDAZLywYp2osa5wmMb6bF",
  "timestamp": "2025-11-18 03: 01: 05",
  "bonding_curve": "CY6WgqVnYsZGbdTUJ41KDdw5VQkyNbRX7BfjBDrbaxzP",
  "mint": "BkCyCNvtbT2nRceACzvrQMC7hSwV1QDdXNQ5XDqwpump",
  "pool_amm": "2VTdi7zqY7AXjcd4sjCqqSCHT6CKt8yDdrA2nqFMKnxv"
}
}

🚩 Playground

This form opens a real WebSocket connection, sends the selected JSON, and shows incoming messages. You can change the endpoint, payload, and experiment with subscriptions:

wss://api2.yodao.io

🚧 Getting data over WebSocket with JS

  1. Choose a unique id (for example, your wallet public key). Use it both in the URL and in the message body.
  2. Open WebSocket: wss://api2.yodao.io/?id=<YOUR_ID>. The id query param is required.
  3. After the connection opens, send a subscription JSON to the desired channel with the same id in data.id.
  4. The server sends { "type": "ping" } every ~30 seconds. Reply with { "type": "pong" } to keep the connection alive.

View Code

javascript
const userId = 'wallet_pubkey_or_any_id'
const wsUrl = new URL('wss://api2.yodao.io')
wsUrl.searchParams.set('id', userId)
const ws = new WebSocket(wsUrl)

// open websocket connection
ws.addEventListener('open', () => {
const payload = {
  // event we want to subscribe to
  // e.g. 'update_pools_info' – latest 50 tokens from New, Completing, Completed
  event: 'update_pools_info',
  data: {
    // action: subscribe
    action: 'subscribe',

    // Your unique identifier (wallet address or custom ID), 
    // which you've passed as x-socket-id to meme tables route,
    // if you need real-time updates for meme tables
    id: userId
  }
}

// send subscription
ws.send(JSON.stringify(payload))

// subscribe to additional channels in the same connection—no need for extra sockets
})

// handle incoming messages
ws.addEventListener('message', (event) => {
const incoming = JSON.parse(event.data)

// reply to server ping to keep the connection open
if (incoming?.type === 'ping') {
  ws.send(JSON.stringify({ type: 'pong' }))
  console.log('→ sent pong')
  return
}

console.log('New message', incoming)
})

// To unsubscribe from any channel send __STRING_0__
function unsubscribe() {
ws.send(
  JSON.stringify({
    event: 'update_pools_info',
    data: {
      // action: unsubscribe
      action: 'unsubscribe',
      id: 'docs-demo'
    }
  })
)
}

// Cleanup on page unload
window.addEventListener('beforeunload', () => ws.close())
Caution

Do not open a new WebSocket for every subscription message. Otherwise we’ll have to block you—contact us to unblock.

Last updated on